package databases

import (
	"fmt"

	"gorm.io/driver/sqlite" // 基于 CGO 的 Sqlite 驱动
	"gorm.io/gorm"
)

// 常量定义
const (
	SQLiteDefaultDB = "test.db"
)

// SQLiteConfig SQLite 数据库配置
type SQLiteConfig Database

// 确保实现了InitDBter接口
var _ InitDBter = (*SQLiteConfig)(nil)

// InitDB 初始化SQLite数据库连接
func (d *SQLiteConfig) InitDB() *gorm.DB {
	// 获取数据库文件路径
	dbPath := d.getDatabasePath()

	// 创建数据库连接
	db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{
		DisableForeignKeyConstraintWhenMigrating: true,
	})
	if err != nil {
		panic(fmt.Sprintf("SQLite数据库连接失败: %v", err))
	}

	return db
}

// getDatabasePath 获取数据库文件路径
func (d *SQLiteConfig) getDatabasePath() string {
	// SQLite使用文件路径，优先级：Name -> Database -> 默认值
	if d.Name != "" {
		return d.Name
	}
	if d.Database != "" {
		return d.Database
	}
	return SQLiteDefaultDB
}

func (d *SQLiteConfig) TRUNCATETable(db *gorm.DB, tableName string) error {
	err := db.Exec(fmt.Sprintf("DELETE FROM sqlite_sequence WHERE name='%s'", tableName)).Error
	if err != nil {
		return err
	}
	err = db.Exec("VACUUM").Error
	return err
}
